package com.itheima.service.impl;

import com.itheima.dao.ProductDao;
import com.itheima.dao.ProductEsDao;
import com.itheima.dao.UserDao;
import com.itheima.domain.Product;
import com.itheima.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Service
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductDao productDao;
    @Autowired
    private UserDao userDao;
    @Autowired
    private ProductEsDao productEsDao;

    @Override
    public String productUpload(Product product) {
        if (productDao.findSameProducts(product.getUserId(), product.getCategoryId(), product.getTitle(), product.getPrice(), product.getConditionLevel()) > 0) {
            return "已发布相同商品且正在出售，请勿重复发布";
        }
        Date nowTime = new Date();
        product.setCreateTime(nowTime);
        //先执行数据库插入操作
        int insertResult=productDao.insertProduct(product);
        if(insertResult>0){
            System.out.println("数据库插入商品成功，开始同步到 ES");
            productEsDao.save(product);
            System.out.println("商品同步到 ES 完成");
            return null;//表示发布成功

        }else
        {
            return "发布商品失败";
        }

    }

    @Override
    public Product findProduct(Product product) {
        Product findResult = productDao.findProduct(product);
        if (findResult == null) {
            return null;
        } else {
            return findResult;
        }
    }

    @Override
    public void updateImage(String imageUrl, int productId) {
        productDao.updateImage(imageUrl, productId);
    }

    @Override
    public List<Product> findLatestProducts(int limit) {
        return productDao.selectLatestProducts(limit);
    }

    @Override
    public List<Product> AllProducts() {
        return productDao.selectAllProducts();
    }

    @Override
    public Product findProductById(int productId) {
        return productDao.selectByProductId(productId);
    }

    @Override
    public String getProductTitle(int productId) {
        return productDao.getProductTitle(productId);
    }

    @Override
    public String getProductImage(int productId) {
        return productDao.getProductImage(productId);
    }

    @Override
    public BigDecimal getProductPrice(int productId) {
        return productDao.getProductPrice(productId);
    }

    @Override
    public String getProductDescription(int productId) {
        return productDao.getProductDescription(productId);
    }

    @Override
    public String getProductConditionLevel(int productId) {
        int level = productDao.getProductConditionLevel(productId);
        if (level == 1) {
            return "全新";
        } else if (level == 2) {
            return "几乎全新";
        } else if (level == 3) {
            return "轻微使用痕迹";
        } else if (level == 4) {
            return "明显使用痕迹";
        } else if (level == 5) {
            return "需要维修";
        }
        return null;
    }

    @Override
    public String getProductSellerPhone(int productId) {
        Product product = productDao.selectByProductId(productId);
        return userDao.getProductSellerPhone(product.getUserId());
    }

    @Override
    public List<Product> findProductsByUserId(int userId) {
        return productDao.findProductsByUserId(userId);
    }

    //商品售出
    @Override
    public int soldProductById(int productId)
    {
        //更新数据库中商品为已售出状态
        int result=productDao.soldProduct(productId);

        // 如果数据库操作成功，更新 ES 中商品的状态
        if (result > 0) {
            Product product = productDao.selectByProductId(productId);
            if (product != null) {
                productEsDao.save(product);
            }
        }

        return result;
    }

    //商品上架
    @Override
    public int uploadProductF1(int productId) {
        //上架商品（更新数据库库中商品状态）
        int result=productDao.uploadProduct(productId);
        //如果数据库操作成功，更新es中商品的状态
        if(result>0){
            Product product=productDao.selectByProductId(productId);
            if (product!=null){
                productEsDao.save(product);
            }
        }

        return result;
    }

    //商品下架
    @Override
    public int downProductById(int productId) {
        //下架商品
        int result=productDao.downProduct(productId);
        //如果数据库操作成功，更新es中商品的状态
        if(result>0){
            Product product=productDao.selectByProductId(productId);
            if(product!=null){
                productEsDao.save(product);
            }
        }
        return result;
    }
    //删除商品记录
    @Override
    public int deleteProductEver(int productId) {
        //先更新数据库中商品状态为已删除
        int result=productDao.deleteProductEver(productId);
        //如果数据库操作成功，删除es中的商品数据
        if(result>0){
            productEsDao.deleteById(productId);
        }
        return result;
    }

    //更新商品信息
    @Override
    public String updateProductInfo(Product product) {
        try {
            // 验证商品是否存在
            Product existingProduct = productDao.selectByProductId(product.getProductId());
            if (existingProduct == null) {
                return "商品不存在";
            }

            product.setUpdateTime(new Date());

            // 更新商品信息
            int result = productDao.updateProductInfo(product);
            if (result <= 0) {
                return "商品更新失败";
            }
            //同步更新到ES
            productEsDao.save(product);

            return null; // 返回null表示成功
        } catch (Exception e) {
            e.printStackTrace();
            return "更新商品时发生错误: " + e.getMessage();
        }
    }

}
